<!DOCTYPE html>
<!-- saved from url=(0029)chrome-error://chromewebdata/ -->
<html dir="ltr" lang="zh" subframe=""><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
  <meta name="theme-color" content="#fff">
  <meta name="viewport" content="width=device-width, initial-scale=1.0,
                                 maximum-scale=1.0, user-scalable=no">
  <title>td.doubleclick.net</title>
  <style>/* Copyright 2017 The Chromium Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

a {
  color: var(--link-color);
}

body {
  --background-color: #fff;
  --error-code-color: var(--google-gray-700);
  --google-blue-50: rgb(232, 240, 254);
  --google-blue-100: rgb(210, 227, 252);
  --google-blue-300: rgb(138, 180, 248);
  --google-blue-600: rgb(26, 115, 232);
  --google-blue-700: rgb(25, 103, 210);
  --google-gray-100: rgb(241, 243, 244);
  --google-gray-300: rgb(218, 220, 224);
  --google-gray-500: rgb(154, 160, 166);
  --google-gray-50: rgb(248, 249, 250);
  --google-gray-600: rgb(128, 134, 139);
  --google-gray-700: rgb(95, 99, 104);
  --google-gray-800: rgb(60, 64, 67);
  --google-gray-900: rgb(32, 33, 36);
  --heading-color: var(--google-gray-900);
  --link-color: rgb(88, 88, 88);
  --primary-button-fill-color-active: var(--google-blue-700);
  --primary-button-fill-color: var(--google-blue-600);
  --primary-button-text-color: #fff;
  --quiet-background-color: rgb(247, 247, 247);
  --secondary-button-border-color: var(--google-gray-500);
  --secondary-button-fill-color: #fff;
  --secondary-button-hover-border-color: var(--google-gray-600);
  --secondary-button-hover-fill-color: var(--google-gray-50);
  --secondary-button-text-color: var(--google-gray-700);
  --small-link-color: var(--google-gray-700);
  --text-color: var(--google-gray-700);
  --edge-background: var(--edge-grey-background);
  --edge-black: #101010;
  --edge-focus-color: #838383;
  --edge-blue-hover: #0078D4;
  --edge-blue-pressed: #1081D7;
  --edge-blue-rest: #0070C6;
  --edge-blue-selected: #004274;
  --edge-border-hover:#949494;
  --edge-border-pressed: #ADADAD;
  --edge-border-rest: #C5C5C5;
  --edge-grey-background: #F6F6F6;
  --edge-grey-selected: #C6C6C6;
  --edge-light-grey-hover: #F3F3F3;
  --edge-light-grey-pressed: #F7F7F7;
  --edge-light-grey-rest: #EFEFEF;
  --edge-primary-text-color: var(--edge-black);
  --edge-secondary-text-color: var(--edge-text-grey-rest);
  --edge-text-blue-hover: #0070C6;
  --edge-text-blue-rest: #0061AB;
  --edge-text-blue-pressed: #1081D7;
  --edge-text-grey-rest: #6F6F6F;
  --edge-white: #FFFFFF;
  --edge-primary-button-focus-shadow: 0 0 0 2px inset #F2F8FD;
  --edge-focus-outline: 2px solid var(--edge-focus-color);
  background: var(--edge-background);
  color: var(--edge-primary-text-color);
  word-wrap: break-word;
}

.nav-wrapper .secondary-button {
  background: var(--secondary-button-fill-color);
  border: 1px solid var(--secondary-button-border-color);
  color: var(--secondary-button-text-color);
  float: none;
  margin: 0;
  padding: 8px 16px;
}

.hidden {
  display: none;
}

html {
  -webkit-text-size-adjust: 100%;
  font-size: 125%;
}

.icon {
  background-repeat: no-repeat;
  background-size: 100%;
}

@media (prefers-color-scheme: dark) {
  body {
    --background-color: var(--google-gray-900);
    --error-code-color: var(--google-gray-500);
    --heading-color: var(--google-gray-500);
    --link-color: var(--google-blue-300);
    --primary-button-fill-color-active: rgb(129, 162, 208);
    --primary-button-fill-color: var(--google-blue-300);
    --primary-button-text-color: var(--google-gray-900);
    --quiet-background-color: var(--background-color);
    --secondary-button-border-color: var(--google-gray-700);
    --secondary-button-fill-color: var(--google-gray-900);
    --secondary-button-hover-fill-color: rgb(48, 51, 57);
    --secondary-button-text-color: var(--google-blue-300);
    --small-link-color: var(--google-blue-300);
    --text-color: var(--google-gray-500);
    --edge-black: #FFFFFF;
    --edge-focus-color: #888;
    --edge-blue-hover: #0070C6;
    --edge-blue-pressed: #0069B9;
    --edge-blue-rest: #0078D4;
    --edge-blue-selected: #63ACE5;
    --edge-border-hover:#909090;
    --edge-border-pressed: #787878;
    --edge-border-rest: #575757;
    --edge-grey-background: #2D2D2D;
    --edge-grey-selected: #676767;
    --edge-light-grey-hover: #424242;
    --edge-light-grey-pressed: #3E3E3E;
    --edge-light-grey-rest: #464646;
    --edge-text-blue-hover: #429BDF;
    --edge-text-blue-rest: #63ACE5;
    --edge-text-blue-pressed: #2189DA;
    --edge-text-grey-rest: #949494;
    --edge-white: #1D1D1D;
    --edge-primary-button-focus-shadow: 0 0 0 2px inset #F2F8FD;
  }
}
</style>
  <style>/* Copyright 2014 The Chromium Authors
   Copyright (C) Microsoft Corporation. All rights reserved.
   Use of this source code is governed by a BSD-style license that can be
   found in the LICENSE file. */

button {
  border: 0;
  border-radius: 2px;
  box-sizing: border-box;
  color: var(--primary-button-text-color);
  cursor: pointer;
  float: right;
  font-size: .875em;
  margin: 0;
  padding: 8px 16px;
  transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
  user-select: none;
}

[dir='rtl'] button {
  float: left;
}

.bad-clock button,
.captive-portal button,
.https-only button,
.insecure-form button,
.lookalike-url button,
.main-frame-blocked button,
.neterror button,
.pdf button,
.ssl button,
.enterprise-block button,
.enterprise-warn button,
.managed-profile-required button,
.safe-browsing-billing button,
.supervised-user-verify button {
  background: var(--edge-blue-rest);
}

.bad-clock a,
.captive-portal a,
.supervised-user-verify a,
.ssl a {
  color: var(--edge-text-blue-rest);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
}

@media (forced-colors: active) {
  .bad-clock a,
  .captive-portal a,
  .supervised-user-verify a,
  .ssl a {
    forced-color-adjust: none;
    color: LinkText;
    border-bottom: 1px solid currentColor;
  }
  .bad-clock a:focus,
  .captive-portal a:focus,
  .supervised-user-verify a:focus,
  .ssl a:focus {
    outline: none;
    border-bottom: 2px solid LinkText;
  }
}

.bad-clock #primary-button,
.captive-portal #primary-button,
.supervised-user-verify #primary-button,
.ssl #primary-button {
  color: white;
  background-color: var(--edge-blue-rest);
  border: 2px solid var(--edge-blue-rest);
  font-family: system-ui, sans-serif;
  font-weight: 600;
  outline: none;
}

.bad-clock #primary-button:focus,
.captive-portal #primary-button:focus,
.supervised-user-verify #primary-button:focus,
.ssl #primary-button:focus {
  border-color: var(--edge-focus-color);
  box-shadow: var(--edge-primary-button-focus-shadow);
}

.bad-clock #primary-button:hover,
.captive-portal #primary-button:hover,
.supervised-user-verify #primary-button:hover,
.ssl #primary-button:hover {
  background-color: var(--edge-blue-hover);
  border-color: var(--edge-blue-hover);
}

.bad-clock #primary-button:active,
.captive-portal #primary-button:active,
.supervised-user-verify #primary-button:active,
.ssl #primary-button:active {
  background-color: var(--edge-blue-pressed);
  box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3),
      0 2px 6px 2px rgba(60, 64, 67, .15);
}

@media(forced-colors: active) {
  /* Accent button */
  .bad-clock #primary-button,
  .captive-portal #primary-button,
  .supervised-user-verify #primary-button,
  .ssl #primary-button {
    forced-color-adjust: none;
    background-color: Highlight;
    color: HighlightText;
    border: 2px solid transparent;
  }
  .bad-clock #primary-button:focus,
  .captive-portal #primary-button:focus,
  .supervised-user-verify #primary-button:focus,
  .ssl #primary-button:focus {
    outline: 2px solid ButtonText;
    border-color: transparent;
    box-shadow: none;
  }
  .bad-clock #primary-button:hover,
  .captive-portal #primary-button:hover,
  .supervised-user-verify #primary-button:hover,
  .ssl #primary-button:hover {
    background-color: HighlightText;
    color: Highlight;
    border: 2px solid Highlight;
  }
}

.bad-clock #details-button,
.captive-portal #details-button,
.supervised-user-verify #details-button,
.ssl #details-button {
  color: var(--edge-primary-text-color);
  background-color: transparent;
  border-color: var(--edge-border-rest);
}

.bad-clock #details-button:focus,
.captive-portal #details-button:focus,
.supervised-user-verify #details-button:focus,
.ssl #details-button:focus {
  outline: var(--edge-focus-outline);
}

.bad-clock #details-button:active,
.captive-portal #details-button:active,
.supervised-user-verify #details-button:active,
.ssl #details-button:active {
  border-color: white;
  background: var(--edge-light-grey-pressed);
  box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3),
      0 2px 6px 2px rgba(60, 64, 67, .15);
}

.bad-clock #details-button:hover,
.captive-portal #details-button:hover,
.supervised-user-verify #details-button:hover,
.ssl #details-button:hover {
  background: var(--edge-light-grey-hover);
  border-color: var(--edge-border-hover);
  text-decoration: none;
}
@media(forced-colors: active) {
  /* Outline button */
  .bad-clock #details-button,
  .captive-portal #details-button,
  .supervised-user-verify #details-button,
  .ssl #details-button {
    forced-color-adjust: none;
    background-color: ButtonFace;
    color: ButtonText;
    border: 1px solid ButtonText;
  }
  .bad-clock #details-button:focus,
  .captive-portal #details-button:focus,
  .supervised-user-verify #details-button:focus,
  .ssl #details-button:focus {
    outline: 2px solid ButtonText;
  }
  .bad-clock #details-button:hover,
  .captive-portal #details-button:hover,
  .supervised-user-verify #details-button:hover,
  .ssl #details-button:hover {
    background-color: Highlight;
    color: HighlightText;
  }
}

.bad-clock #main-message > p,
.captive-portal #main-message > p,
.supervised-user-verify #main-message > p,
.ssl #main-message > p {
  font-size: 14px;
  line-height: 20px;
  color: var(--edge-primary-text-color);
}
}

button:active {
  background: var(--primary-button-fill-color-active);
  outline: 0;
}

#debugging {
  display: inline;
  overflow: auto;
}

.debugging-content {
  line-height: 1em;
  margin-bottom: 0;
  margin-top: 1em;
}

.debugging-content-fixed-width {
  display: block;
  font-family: monospace;
  font-size: 1.2em;
  margin-top: 0.5em;
}

.debugging-title {
  font-weight: bold;
}

#details {
  margin: 0 0 50px;
}

#details p:not(:first-of-type) {
  margin-top: 20px;
}

.secondary-button:active {
  border-color: white;
  box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3),
      0 2px 6px 2px rgba(60, 64, 67, .15);
}

.secondary-button:hover {
  background: var(--secondary-button-hover-fill-color);
  border-color: var(--secondary-button-hover-border-color);
  text-decoration: none;
}

.error-code {
  color: var(--error-code-color);
  font-size: .8em;
  margin-top: 12px;
  text-transform: uppercase;
}

#error-debugging-info {
  font-size: 0.8em;
}

h1 {
  color: var(--edge-primary-text-color);
  font-size: 1.6em;
  font-weight: bold;
  line-height: 1.25em;
  margin-bottom: 16px;
}

h2 {
  font-size: 1.2em;
  font-weight: normal;
}

.icon {
  height: 72px;
  margin: 0 0 40px;
  width: 72px;
}

input[type=checkbox] {
  opacity: 0;
}

input[type=checkbox]:focus ~ .checkbox::after {
  outline: -webkit-focus-ring-color auto 5px;
}

.interstitial-wrapper {
  box-sizing: border-box;
  font-size: 1em;
  line-height: 1.6em;
  margin: 14vh auto 0;
  max-width: 600px;
  width: 100%;
}

#main-message > p {
  display: inline;
}

#extended-reporting-opt-in {
  font-size: .875em;
  margin-top: 32px;
}

#extended-reporting-opt-in label {
  display: grid;
  grid-template-columns: 1.8em 1fr;
  position: relative;
}

#enhanced-protection-message {
  border-radius: 20px;
  font-size: 1em;
  margin-top: 32px;
  padding: 10px 5px;
}

#enhanced-protection-message a {
  color: var(--google-red-10);
}

#enhanced-protection-message label {
  display: grid;
  grid-template-columns: 2.5em 1fr;
  position: relative;
}

#enhanced-protection-message div {
  margin: 0.5em;
}

#enhanced-protection-message .icon {
  height: 1.5em;
  vertical-align: middle;
  width: 1.5em;
}

#https-upgrades-message {
  border-radius: 4px;
  font-size: 1em;
}

.nav-wrapper {
  margin-top: 51px;
}

.nav-wrapper::after {
  clear: both;
  content: '';
  display: table;
  width: 100%;
}

.small-link {
  color: var(--small-link-color);
  font-size: .875em;
}

.checkboxes {
  flex: 0 0 24px;
}

.checkbox {
  --padding: .9em;
  background: transparent;
  display: block;
  height: 1em;
  left: -1em;
  padding-inline-start: var(--padding);
  position: absolute;
  right: 0;
  top: -.5em;
  width: 1em;
}

.checkbox::after {
  border: 1px solid white;
  border-radius: 2px;
  content: '';
  height: 1em;
  left: var(--padding);
  position: absolute;
  top: var(--padding);
  width: 1em;
}

.checkbox::before {
  background: transparent;
  border: 2px solid white;
  border-inline-end-width: 0;
  border-top-width: 0;
  content: '';
  height: .2em;
  left: calc(.3em + var(--padding));
  opacity: 0;
  position: absolute;
  top: calc(.3em  + var(--padding));
  transform: rotate(-45deg);
  width: .5em;
}

input[type=checkbox]:checked ~ .checkbox::before {
  opacity: 1;
}

#recurrent-error-message {
  background: var(--edge-light-grey-rest);
  border-radius: 4px;
  margin-bottom: 16px;
  margin-top: 12px;
  padding: 12px 16px;
}

.showing-recurrent-error-message #extended-reporting-opt-in {
  margin-top: 16px;
}

.showing-recurrent-error-message #enhanced-protection-message {
  margin-top: 16px;
}

@media (max-width: 700px) {
  .interstitial-wrapper {
    padding: 0 10%;
  }

  #error-debugging-info {
    overflow: auto;
  }
}

@media (max-width: 420px) {
  button,
  [dir='rtl'] button,
  .small-link {
    float: none;
    font-size: .825em;
    font-weight: 500;
    margin: 0;
    width: 100%;
  }

  button {
    padding: 16px 24px;
  }

  #details {
    margin: 20px 0 20px 0;
  }

  #details p:not(:first-of-type) {
    margin-top: 10px;
  }

  .secondary-button:not(.hidden) {
    display: block;
    margin-top: 20px;
    text-align: center;
    width: 100%;
  }

  .interstitial-wrapper {
    padding: 0 5%;
  }

  #extended-reporting-opt-in {
    margin-top: 24px;
  }

  #enhanced-protection-message {
    margin-top: 24px;
  }

  .nav-wrapper {
    margin-top: 30px;
  }
}

/**
 * Mobile specific styling.
 * Navigation buttons are anchored to the bottom of the screen.
 * Details message replaces the top content in its own scrollable area.
 */

@media (max-width: 420px) {
  .nav-wrapper .secondary-button {
    border: 0;
    margin: 16px 0 0;
    margin-inline-end: 0;
    padding-bottom: 16px;
    padding-top: 16px;
  }
}

/* Fixed nav. */
@media (min-width: 240px) and (max-width: 420px) and
       (min-height: 401px),
       (min-width: 421px) and (min-height: 240px) and
       (max-height: 560px) {
  body .nav-wrapper {
    background: var(--edge-grey-background);
    bottom: 0;
    box-shadow: 0 -22px 40px var(--edge-grey-background);
    left: 0;
    margin: 0 auto;
    max-width: 736px;
    padding-inline-end: 24px;
    padding-inline-start: 24px;
    position: fixed;
    right: 0;
    width: 100%;
    z-index: 2;
  }

  .interstitial-wrapper {
    max-width: 736px;
  }

  #details,
  #main-content {
    padding-bottom: 40px;
  }

  #details {
    padding-top: 5.5vh;
  }

  button.small-link {
    color: var(--google-blue-600);
  }
}

@media (max-width: 420px) and (orientation: portrait),
       (max-height: 560px) {
  body {
    margin: 0 auto;
  }

  button,
  #details-button,
  [dir='rtl'] button,
  button.small-link {
    font-size: .933em;
    margin: 6px 0;
    transform: translatez(0);
  }

  .nav-wrapper {
    box-sizing: border-box;
    padding-bottom: 8px;
    width: 100%;
  }

  #details {
    box-sizing: border-box;
    height: auto;
    margin: 0;
    opacity: 1;
    transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
  }

  #details.hidden,
  #main-content.hidden {
    height: 0;
    opacity: 0;
    overflow: hidden;
    padding-bottom: 0;
    transition: none;
  }

  h1 {
    font-size: 1.5em;
    margin-bottom: 8px;
  }

  .icon {
    margin-bottom: 5.69vh;
  }

  .interstitial-wrapper {
    box-sizing: border-box;
    margin: 7vh auto 12px;
    padding: 0 24px;
    position: relative;
  }

  .interstitial-wrapper p {
    font-size: .95em;
    line-height: 1.61em;
    margin-top: 8px;
  }

  #main-content {
    margin: 0;
    transition: opacity 100ms cubic-bezier(0.4, 0, 0.2, 1);
  }

  .small-link {
    border: 0;
  }

  .suggested-left > #control-buttons,
  .suggested-right > #control-buttons {
    float: none;
    margin: 0;
  }
}

@media (min-width: 421px) and (min-height: 500px) and (max-height: 560px) {
  .interstitial-wrapper {
    margin-top: 10vh;
  }
}

@media (min-height: 400px) and (orientation:portrait) {
  .interstitial-wrapper {
    margin-bottom: 145px;
  }
}

@media (min-height: 299px) {
  .nav-wrapper {
    padding-bottom: 16px;
  }
}

@media (max-height: 560px) and (min-height: 240px) and (orientation:landscape) {
  .extended-reporting-has-checkbox #details {
    padding-bottom: 80px;
  }
}

@media (min-height: 500px) and (max-height: 650px) and (max-width: 414px) and
       (orientation: portrait) {
  .interstitial-wrapper {
    margin-top: 7vh;
  }
}

@media (min-height: 650px) and (max-width: 414px) and (orientation: portrait) {
  .interstitial-wrapper {
    margin-top: 10vh;
  }
}

/* Small mobile screens. No fixed nav. */
@media (max-height: 400px) and (orientation: portrait),
       (max-height: 239px) and (orientation: landscape),
       (max-width: 419px) and (max-height: 399px) {
  .interstitial-wrapper {
    display: flex;
    flex-direction: column;
    margin-bottom: 0;
  }

  #details {
    flex: 1 1 auto;
    order: 0;
  }

  #main-content {
    flex: 1 1 auto;
    order: 0;
  }

  .nav-wrapper {
    flex: 0 1 auto;
    margin-top: 8px;
    order: 1;
    padding-inline-end: 0;
    padding-inline-start: 0;
    position: relative;
    width: 100%;
  }

  button,
  .nav-wrapper .secondary-button {
    padding: 16px 24px;
  }

  button.small-link {
    color: var(--google-blue-600);
  }
}

@media (max-width: 239px) and (orientation: portrait) {
  .nav-wrapper {
    padding-inline-end: 0;
    padding-inline-start: 0;
  }
}

</style>
  <style>/* Copyright 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

/* Don't use the main frame div when the error is in a subframe. */
body {
  background-color: var(--edge-grey-background);
}

html[subframe] #main-frame-error {
  display: none;
}

/* Don't use the subframe error div when the error is in a main frame. */
html:not([subframe]) #sub-frame-error {
  display: none;
}

h1 {
  margin-top: 0;
  word-wrap: break-word;
  color: var(--edge-primary-text-color);
  margin-bottom: 22px;
}

h1 span {
  font-weight: bold;
  font-size: 24px;
  line-height: 32px;
}

h2 {
  color: var(--edge-secondary-text-color);
  font-size: 1.2em;
  font-weight: normal;
  margin: 10px 0;
}

a {
  color: var(--edge-text-blue-rest);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
}

a:hover {
  color: var(--edge-text-blue-hover);
}

a:focus {
  outline: none;
  text-decoration: none;
  border-bottom: var(--edge-focus-outline);
}


#buttons {
  display: grid;
  grid-template-rows: auto auto;
}
.text-button {
  float: inline-start;
  margin-bottom: 10px;
}

#game-buttons {
  display: flex;
  align-items: center;
}

#game-message {
  margin-inline-end: 16px;
}

#game-button {
  color: var(--edge-primary-text-color);
  background-color: transparent;
  border: 1px solid var(--edge-border-rest);
}

#game-button:disabled {
  opacity: 0.3;
  cursor: not-allowed;
}

#game-button:hover:not(:disabled) {
  background-color: var(--edge-light-grey-hover);
  border-color: var(--edge-border-hover);
}

#game-button:active:not(:disabled) {
  border-color: white;
  background: var(--edge-light-grey-pressed);
  box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3),
    0 2px 6px 2px rgba(60, 64, 67, .15);
}

#game-button:focus:not(:disabled) {
  outline: var(--edge-focus-outline);
}

@media (forced-colors: active) {
  a:hover {
    color: HightlightText;
  }
}

.icon {
  -webkit-user-select: none;
  display: inline-block;
}

.icon-generic {
  /**
   * Can't access edge://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted
   * renderer process, so embed the resource manually.
   */
  content: -webkit-image-set(
      url() 1x,
      url() 2x);
}

.icon-offline {
  content: -webkit-image-set(
      url() 1x,
      url() 2x);
  position: relative;
}

.icon-page-error {
  content: url();
}

.icon-thinking {
  content: url();
}

.icon-blocked {
  content: url();
}

.icon-disconnected {
  content: url();
}

.icon-find {
  content: url();
}

.icon-insecure-site {
  content: url();
}

.icon-page-briefcase {
  content: url();
}

.icon-disabled {
  content: -webkit-image-set(
      url() 1x,
      url() 2x);
  width: 112px;
}

.image-earth {
  content: url();
}

.image-video {
  content: url();
}

.image-music-note {
  content: url();
}

.image-file {
  content: url();
}

.managed-icon {
  content: url();
  margin-inline-end: 6px;
  height: 16px;
  width: 16px;
}

.error-code {
  display: block;
  font-size: 10px;
  line-height: 12px;
  color: var(--edge-secondary-text-color);
  margin-top: 24px;
  font-weight: 500;
}

#content-top {
  margin: 20px;
}

.hidden {
  display: none;
}

#suggestion {
  margin-top: 15px;
}

#suggestions-list p {
  margin-block-end: 0;
  color: var(--edge-primary-text-color);
  font-weight: 700;
}

#suggestions-list ul {
  margin-top: 0;
  color: var(--edge-primary-text-color);
  padding-inline-start: 0;
  list-style: none;
}

#suggestions-list li {
  margin-top: 12px;
  font-size: 14px;
  line-height: 20px;
}

#suggestions-list li:before {
  content: "•";
  font-size: 14px;
  padding-right: 1em;
}

.single-suggestion li:before{
  display: none;
}

#short-suggestion {
  margin-top: 5px;
}

#error-information-button {
  content: url();
  height: 24px;
  vertical-align: -.15em;
  width: 24px;
}

.use-popup-container#error-information-popup-container
  #error-information-popup {
  align-items: center;
  background-color: var(--edge-grey-background);
  display: flex;
  height: 100%;
  left: 0;
  position: fixed;
  top: 0;
  width: 100%;
  z-index: 100;
}

.use-popup-container#error-information-popup-container
  #error-information-popup-content > p {
  margin-bottom: 11px;
  margin-inline-start: 20px;
}

.use-popup-container#error-information-popup-container #suggestions-list ul {
  margin-inline-start: 15px;
}

.use-popup-container#error-information-popup-container
  #error-information-popup-box {
  background-color: var(--edge-white);
  left: 5%;
  padding-bottom: 15px;
  padding-top: 15px;
  position: fixed;
  width: 90%;
  z-index: 101;
}

.use-popup-container#error-information-popup-container div.error-code {
  margin-inline-start: 20px;
}

.use-popup-container#error-information-popup-container #suggestions-list p {
  margin-inline-start: 20px;
}

:not(.use-popup-container)#error-information-popup-container
  #error-information-popup-close {
  display: none;
}

#error-information-popup-close {
  margin-bottom: 0px;
  margin-inline-end: 35px;
  margin-top: 15px;
  text-align: end;
}

.link-button {
  color: var(--edge-text-blue-rest);
  display: inline-block;
  font-weight: bold;
  text-transform: uppercase;
}

#sub-frame-error-details {
  color: var(--edge-secondary-text-color);

}


#search-container {
  /* Prevents a space between controls. */
  display: flex;
  margin-top: 20px;
}

.snackbar {
  background: #323232;
  border-radius: 2px;
  bottom: 24px;
  box-sizing: border-box;
  color: #fff;
  font-size: .87em;
  left: 24px;
  max-width: 568px;
  min-width: 288px;
  opacity: 0;
  padding: 16px 24px 12px;
  position: fixed;
  transform: translateY(90px);
  will-change: opacity, transform;
  z-index: 999;
}

.snackbar-show {
  -webkit-animation:
    show-snackbar .25s cubic-bezier(0.0, 0.0, 0.2, 1) forwards,
    hide-snackbar .25s cubic-bezier(0.4, 0.0, 1, 1) forwards 5s;
}

@-webkit-keyframes show-snackbar {
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@-webkit-keyframes hide-snackbar {
  0% {
    opacity: 1;
    transform: translateY(0);
  }
  100% {
    opacity: 0;
    transform: translateY(90px);
  }
}

.suggestions {
  margin-top: 18px;
  color: var(--edge-primary-text-color);
  font-size: 14px;
  line-height: 20px;
}

.suggestion-header {
  font-weight: bold;
  margin-bottom: 4px;
}

/* Decrease padding at low sizes. */
@media (max-width: 640px), (max-height: 640px) {
  h1 {
    margin: 0 0 15px;
  }
  #content-top {
    margin: 15px;
  }
  .suggestions {
    margin-top: 10px;
  }
  .suggestion-header {
    margin-bottom: 0;
  }
}

#download-link, #download-link-clicked {
  margin-bottom: 30px;
  margin-top: 30px;
}

#download-link-clicked {
  color: #BBB;
}

#download-link:before, #download-link-clicked:before {
  content: url();
  display: inline-block;
  margin-inline-end: 4px;
  vertical-align: -webkit-baseline-middle;
}

#download-link-clicked:before {
  width: 0px;
  opacity: 0;
}

.offline-content-list-title {
  color: rgb(95, 99, 104);
  font-size: .8em;
  line-height: 1;
  margin-bottom: .8em;
}

#offline-content-suggestions {
  margin-inline-start: -5%;
  width: 110%;
}

/* The selectors below adjust the "overflow" of the suggestion cards contents
 * based on the same screen size based strategy used for the main frame, which
 * is applied by the `interstitial-wrapper` class. */
@media (max-width: 700px) {
  #offline-content-suggestions {
    margin-inline-start: -5%;
    width: 110%;
  }
}
@media (max-width: 420px)  {
  #offline-content-suggestions {
    margin-inline-start: -2.5%;
    width: 105%;
  }
}
@media (max-width: 420px) and (orientation: portrait),
       (max-height: 560px) {
  #offline-content-suggestions {
    margin-inline-start: -12px;
    width: calc(100% + 24px);
  }
}

.suggestion-with-image .offline-content-suggestion-visual {
  flex-basis: 8.2em;
  flex-shrink: 0;
}

.suggestion-with-image .offline-content-suggestion-visual > img {
  height: 100%;
  width: 100%;
}

#offline-content-list:not(.is-rtl) .suggestion-with-image
.offline-content-suggestion-visual > img {
  border-bottom-right-radius: 8px;
  border-top-right-radius: 8px;
}

#offline-content-list.is-rtl .suggestion-with-image
.offline-content-suggestion-visual > img {
  border-bottom-left-radius: 8px;
  border-top-left-radius: 8px;
}

.suggestion-with-icon .offline-content-suggestion-visual {
  align-items: center;
  display: flex;
  justify-content: center;
  min-height: 4.2em;
  min-width: 4.2em;
}

.suggestion-with-icon .offline-content-suggestion-visual > div {
  align-items: center;
  background-color: rgb(241, 243, 244);
  border-radius: 50%;
  display: flex;
  height: 2.3em;
  justify-content: center;
  width: 2.3em;
}

.suggestion-with-icon .offline-content-suggestion-visual > div > img {
  height: 1.45em;
  width: 1.45em;
}

.offline-content-suggestion-texts {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  line-height: 1.3;
  padding: .9em;
  width: 100%;
}

.offline-content-suggestion-title {
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  color: rgb(32, 33, 36);
  display: -webkit-box;
  font-size: 1.1em;
  overflow: hidden;
  text-overflow: ellipsis;
}

div.offline-content-suggestion {
  align-items: stretch;
  border-color: rgb(218, 220, 224);
  border-radius: 8px;
  border-style: solid;
  border-width: 1px;
  display: flex;
  justify-content: space-between;
  margin-bottom: .8em;
}

.suggestion-with-image {
  flex-direction: row;
  height: 8.2em;
  max-height: 8.2em;
}

.suggestion-with-icon {
  flex-direction: row-reverse;
  height: 4.2em;
  max-height: 4.2em;
}

.suggestion-with-icon .offline-content-suggestion-title {
  -webkit-line-clamp: 1;
  word-break: break-all;
}

.suggestion-with-icon .offline-content-suggestion-texts {
  padding-inline-start: 0px;
}

.offline-content-suggestion-attribution-freshness {
  color: rgb(95, 99, 104);
  display: flex;
  font-size: .8em;
}

.offline-content-suggestion-attribution {
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  display: -webkit-box;
  flex-shrink: 1;
  overflow-wrap: break-word;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-all;
}

.no-attribution .offline-content-suggestion-attribution {
  display: none;
}

.offline-content-suggestion-freshness:before {
  content: '-';
  display: inline-block;
  flex-shrink: 0;
  margin-inline-end: .1em;
  margin-inline-start: .1em;
}

.no-attribution .offline-content-suggestion-freshness:before {
  display: none;
}

.offline-content-suggestion-freshness {
  flex-shrink: 0;
}

.suggestion-with-image .offline-content-suggestion-pin-spacer {
  flex-shrink: 1;
  flex-grow: 100;
}

.suggestion-with-image .offline-content-suggestion-pin {
  content: url();
  flex-shrink: 0;
  height: 1.4em;
  margin-inline-start: .4em;
  width: 1.4em;
}

.offline-content-list-action {
  text-align: center;
}

#offline-content-summary {
  border-color: rgb(241, 243, 244);
  border-radius: 12px;
  border-style: solid;
  border-width: 1px;
  padding: 12px;
  text-align: center;
}

.offline-content-summary-image-truncate {
  width: 45px;
}

.offline-content-summary-images {
  direction: ltr;
  display: flex;
  margin-top: 10px;
  justify-content: center;
  padding-bottom: 12px;
}

.offline-content-summary-images img {
  background: rgb(241, 243, 244);
  border-radius: 50%;
  box-shadow:
    0px 1px 2px 0px rgb(155, 155, 155),
    0px 1px 3px 0px rgb(155, 155, 155);
  padding: 12px;
  width: 32px;
}

.offline-content-summary-description {
  border-top: 1px solid rgb(241, 243, 244);
  padding-top: 12px;
}

.offline-content-summary-action {
  padding-top: 12px;
}

/* Don't allow overflow when in a subframe. */
html[subframe] body {
  overflow: hidden;
}

#sub-frame-error {
  -webkit-align-items: center;
  background-color: #DDD;
  display: -webkit-flex;
  -webkit-flex-flow: column;
  height: 100%;
  -webkit-justify-content: center;
  left: 0;
  position: absolute;
  text-align: center;
  top: 0;
  transition: background-color .2s ease-in-out;
  width: 100%;
}

#sub-frame-error:hover {
  background-color: #EEE;
}

#sub-frame-error .icon-generic {
  margin: 0 0 16px;
}

#sub-frame-error-details {
  margin: 0 10px;
  text-align: center;
  visibility: hidden;
}

/* Show details only when hovering. */
#sub-frame-error:hover #sub-frame-error-details {
  visibility: visible;
}

/* If the iframe is too small, always hide the error code. */
/* TODO(mmenke): See if overflow: no-display works better, once supported. */
@media (max-width: 200px), (max-height: 95px) {
  #sub-frame-error-details {
    display: none;
  }
}

/* Adjust icon for small embedded frames in apps. */
@media (max-height: 100px) {
  #sub-frame-error .icon-generic {
    height: auto;
    margin: 0;
    padding-top: 0;
    width: 25px;
  }
}

#control-buttons {
  margin-bottom: 44px;
}

/* details-button is special; it's a <button> element that looks like a link. */
#details-buttons {
  width: 100%;
}

#details-button {
  box-shadow: none;
  min-width: 0;
  background: none;
  border: none;
  color: var(--edge-primary-text-color);
  cursor: pointer;
  font-size: 14px;
  line-height: 20px;
  text-decoration: none;
  float: left;
  padding: 4px;
  font-family: system-ui, sans-serif;
}

#details-button:before {
  display: inline-block;
  content: "";
  background-image: url("");
  margin-right: 10px;
  width: 14px;
  height: 10px;
  background-repeat: no-repeat;
  background-position: center center;
  fill: var(--edge-primary-text-color);
}

#details-button.expanded:before {
  transform: rotate(180deg);
}

#details-button:focus {
  outline: solid 2px var(--edge-focus-color);
}
@media (forced-colors: active) {
  #details-button,
  #game-button {
    forced-color-adjust: none;
    color: ButtonText;
    background-color: ButtonFace;
  }
  #game-button {
    /* extra border for this button only */
    border: 1px solid ButtonText;
  }
  #details-button::before,
  #game-button::before {
    fill: ButtonText;
  }
  #details-button:focus,
  #game-button:focus {
    outline: 2px solid ButtonText;
  }
  #details-button:hover,
  #game-button:hover {
    background-color: Highlight;
    color: HighlightText;
  }
  #details-button:hover::before,
  #game-button:hover::before {
    fill: HighlightText;
  }
}

.nav-wrapper {
  margin-top: 44px;
}

#control-buttons,
#stale-load-button,
#details-buttons {
  float: left !important;
}

.suggested-left .secondary-button {
  margin-inline-end: 0px;
}

#details-button.singular {
  float: none;
}

/* download-button shows both icon and text. */
#download-button {
  padding-bottom: 4px;
  padding-top: 4px;
  position: relative;
}

#download-button:before {
  background: -webkit-image-set(
      url() 1x,
      url() 2x)
    no-repeat;
  content: '';
  display: inline-block;
  width: 24px;
  height: 24px;
  margin-inline-end: 4px;
  margin-inline-start: -4px;
  vertical-align: middle;
}

#download-button:disabled {
  background: rgb(180, 206, 249);
  color: rgb(255, 255, 255);
}

/*
TODO(https://crbug.com/852872): UI for offline suggested content is incomplete.
*/
.suggested-thumbnail {
  width: 25vw;
  height: 25vw;
}

#reload-button {
  background-color: var(--edge-blue-rest);
  color: white; /* always white because it is a blue button */
  border-radius: 2px;
  width: 100px;
  height: 32px;
  font-family: system-ui, sans-serif;
  font-weight: 600;
  font-size: 12px;
  padding: 0;
  outline: none;
}

#reload-button:focus {
  outline: var(--edge-focus-outline);
  box-shadow: var(--edge-primary-button-focus-shadow);
}

#reload-button:hover {
  background-color: var(--edge-blue-hover);
}

#reload-button:active {
  background-color: var(--edge-blue-pressed);
}

@media (forced-colors: active) {
  /* Acts like an accent button */
  #reload-button {
    forced-color-adjust: none;
    background-color: Highlight;
    color: HighlightText;
  }
  #reload-button:hover {
    background-color: HighlightText;
    color: Highlight;
    border: 2px solid Highlight;
  }
  #reload-button:focus {
    outline: 2px solid ButtonText;
    box-shadow: none;
  }
}

#secondary-reload-button {
  background-color: var(--edge-light-grey-rest);
  color: var(--edge-primary-text-color);
  border-radius: 2px;
  width: 100px;
  height: 32px;
  font-family: system-ui, sans-serif;
  font-weight: 600;
  font-size: 12px;
  margin-inline: 10px;
  outline: none;
}

#secondary-reload-button:focus {
  outline: var(--edge-focus-outline);
  box-shadow: var(--edge-primary-button-focus-shadow);
}

#secondary-reload-button:hover {
  background-color: var(--edge-light-grey-hover);
}

#secondary-reload-button:active {
  background-color: var(--edge-light-grey-pressed);
}

@media (forced-colors: active) {
  /* Acts like an accent button */
  #secondary-reload-button {
    forced-color-adjust: none;
    background-color: Highlight;
    color: HighlightText;
  }
  #secondary-reload-button:hover {
    background-color: HighlightText;
    color: Highlight;
    border: 2px solid Highlight;
  }
  #secondary-reload-button:focus {
    outline: 2px solid ButtonText;
    box-shadow: none;
  }
}

#diagnose-button {
  background-color: var(--edge-blue-rest);
  color: white; /* always white because it is a blue button */
  border-radius: 2px;
  width: auto;
  height: 32px;
  font-family: system-ui, sans-serif;
  font-weight: 600;
  font-size: 12px;
  padding-inline: 10px;
  outline: none;
}

#diagnose-button:focus {
  outline: var(--edge-focus-outline);
  box-shadow: var(--edge-primary-button-focus-shadow);
}

#diagnose-button:hover {
  background-color: var(--edge-blue-hover);
}

#diagnose-button:active {
  background-color: var(--edge-blue-pressed);
}

@media (forced-colors: active) {
  /* Acts like an accent button */
  #diagnose-button {
    forced-color-adjust: none;
    background-color: Highlight;
    color: HighlightText;
  }
  #diagnose-button:hover {
    background-color: HighlightText;
    color: Highlight;
    border: 2px solid Highlight;
  }
  #diagnose-button:focus {
    outline: 2px solid ButtonText;
    box-shadow: none;
  }
}

#clearcookies-button {
  background-color: var(--edge-blue-rest);
  color: white;
  border-radius: 2px;
  width: auto;
  height: 32px;
  font-family: system-ui, sans-serif;
  font-weight: 600;
  font-size: 12px;
  padding-inline: 10px;
  outline: none;
}

#clearcookies-button:focus {
  outline: var(--edge-focus-outline);
  box-shadow: var(--edge-primary-button-focus-shadow);
}

#clearcookies-button:hover {
  background-color: var(--edge-blue-hover);
}

#clearcookies-button:active {
  background-color: var(--edge-blue-pressed);
}

@media (forced-colors: active) {
  /* Acts like an accent button */
  #clearcookies-button {
    forced-color-adjust: none;
    background-color: Highlight;
    color: HighlightText;
  }
  #clearcookies-button:hover {
    background-color: HighlightText;
    color: Highlight;
    border: 2px solid Highlight;
  }
  #clearcookies-button:focus {
    outline: 2px solid ButtonText;
    box-shadow: none;
  }
}

/* Offline page */
.offline {
  transition: -webkit-filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
              background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
  will-change: -webkit-filter, background-color;
}

#main-message > p {
  font-size: 14px;
  line-height: 20px;
  color: var(--edge-primary-text-color);
}
.offline #main-message > p {
  display: none;
}

.offline.inverted {
  -webkit-filter: invert(100%);
  background-color: var(--edge-black);
}

.offline .interstitial-wrapper {
  color: #2b2b2b;
  font-size: 1em;
  line-height: 1.55;
  margin: 0 auto;
  max-width: 600px;
  padding-top: 100px;
  width: 100%;
}

.offline .controller {
  background: rgba(247,247,247, .1);
  height: 100vh;
  left: 0;
  position: absolute;
  top: 0;
  width: 100vw;
  z-index: 9;
}

#offline-resources {
  display: none;
}

@media (max-width: 420px) {
  #download-button {
    padding-bottom: 12px;
    padding-top: 12px;
  }

  .snackbar {
    left: 0;
    bottom: 0;
    width: 100%;
    border-radius: 0;
  }
}

@media (max-height: 350px) {
  h1 {
    margin: 0 0 15px;
  }

  .icon-offline {
    margin: 0 0 10px;
  }

  .interstitial-wrapper {
    margin-top: 5%;
  }

  .nav-wrapper {
    margin-top: 30px;
  }
}

@media (min-width: 420px) and (max-width: 736px) and
       (min-height: 240px) and (max-height: 420px) and
       (orientation:landscape) {
  .interstitial-wrapper {
    margin-bottom: 100px;
  }
}

@media (max-width: 360px) and (max-height: 480px) {
  .offline .interstitial-wrapper {
    padding-top: 60px;
  }

}

@media (min-height: 240px) and (orientation: landscape) {
  .offline .interstitial-wrapper {
    margin-bottom: 90px;
  }

  .icon-offline {
    margin-bottom: 20px;
  }
}

@media (max-height: 320px) and (orientation: landscape) {
  .icon-offline {
    margin-bottom: 0;
  }

}

@media (max-width: 240px) {
  button {
    padding-left: 12px;
    padding-right: 12px;
  }

  .interstitial-wrapper {
    overflow: inherit;
    padding: 0 8px;
  }
}

@media (max-width: 120px) {
  button {
    width: auto;
  }
}


@media (prefers-color-scheme: dark) {
  .icon,
  .managed-icon {
    filter: invert(1);
  }

  #details-button:before {
    filter: invert(1);
  }
}

#main-frame-error:not(.showing-details) #details {
  display: none;
}

@media (min-width: 240px) and (max-width: 420px) and (min-height: 401px),
       (min-height: 240px) and (max-height: 560px) and (min-width: 421px) {
  #main-frame-error.showing-details #main-content,
  #main-frame-error.showing-details .runner-container {
    display: none;
  }
}
</style>
  <script>// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
 * Verify |value| is truthy.
 * @param value A value to check for truthiness. Note that this
 *     may be used to test whether |value| is defined or not, and we don't want
 *     to force a cast to boolean.
 */
function assert(value, message) {
    if (value) {
        return;
    }
    throw new Error('Assertion failed' + (message ? `: ${message}` : ''));
}

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
 * @fileoverview This file defines a singleton which provides access to all data
 * that is available as soon as the page's resources are loaded (before DOM
 * content has finished loading). This data includes both localized strings and
 * any data that is important to have ready from a very early stage (e.g. things
 * that must be displayed right away).
 *
 * Note that loadTimeData is not guaranteed to be consistent between page
 * refreshes (https://crbug.com/740629) and should not contain values that might
 * change if the page is re-opened later.
 */
class LoadTimeData {
    data_ = null;
    /**
     * Sets the backing object.
     *
     * Note that there is no getter for |data_| to discourage abuse of the form:
     *
     *     var value = loadTimeData.data()['key'];
     */
    set data(value) {
        assert(!this.data_, 'Re-setting data.');
        this.data_ = value;
    }
    /**
     * @param id An ID of a value that might exist.
     * @return True if |id| is a key in the dictionary.
     */
    valueExists(id) {
        // TODO(42630414): Re-add assert check.
        // Commenting assert statement to mitigate Bug 42601651.
        // assert(this.data_, 'No data. Did you remember to include strings.js?');
        return this.data_ ? id in this.data_ : false;
    }
    /**
     * Fetches a value, expecting that it exists.
     * @param id The key that identifies the desired value.
     * @return The corresponding value.
     */
    getValue(id) {
        assert(this.data_, 'No data. Did you remember to include strings.js?');
        const value = this.data_[id];
        assert(typeof value !== 'undefined', 'Could not find value for ' + id);
        return value;
    }
    /**
     * As above, but also makes sure that the value is a string.
     * @param id The key that identifies the desired string.
     * @return The corresponding string value.
     */
    getString(id) {
        const value = this.getValue(id);
        assert(typeof value === 'string', `[${value}] (${id}) is not a string`);
        return value;
    }
    /**
     * Returns a formatted localized string where $1 to $9 are replaced by the
     * second to the tenth argument.
     * @param id The ID of the string we want.
     * @param args The extra values to include in the formatted output.
     * @return The formatted string.
     */
    getStringF(id, ...args) {
        const value = this.getString(id);
        if (!value) {
            return '';
        }
        return this.substituteString(value, ...args);
    }
    /**
     * Returns a formatted localized string where $1 to $9 are replaced by the
     * second to the tenth argument. Any standalone $ signs must be escaped as
     * $$.
     * @param label The label to substitute through. This is not an resource ID.
     * @param args The extra values to include in the formatted output.
     * @return The formatted string.
     */
    substituteString(label, ...args) {
        return label.replace(/\$(.|$|\n)/g, function (m) {
            assert(m.match(/\$[$1-9]/), 'Unescaped $ found in localized string.');
            if (m === '$$') {
                return '$';
            }
            const substitute = args[Number(m[1]) - 1];
            if (substitute === undefined || substitute === null) {
                // Not all callers actually provide values for all substitutes. Return
                // an empty value for this case.
                return '';
            }
            return substitute.toString();
        });
    }
    /**
     * Returns a formatted string where $1 to $9 are replaced by the second to
     * tenth argument, split apart into a list of pieces describing how the
     * substitution was performed. Any standalone $ signs must be escaped as $$.
     * @param label A localized string to substitute through.
     *     This is not an resource ID.
     * @param args The extra values to include in the formatted output.
     * @return The formatted string pieces.
     */
    getSubstitutedStringPieces(label, ...args) {
        // Split the string by separately matching all occurrences of $1-9 and of
        // non $1-9 pieces.
        const pieces = (label.match(/(\$[1-9])|(([^$]|\$([^1-9]|$))+)/g) ||
            []).map(function (p) {
            // Pieces that are not $1-9 should be returned after replacing $$
            // with $.
            if (!p.match(/^\$[1-9]$/)) {
                assert((p.match(/\$/g) || []).length % 2 === 0, 'Unescaped $ found in localized string.');
                return { value: p.replace(/\$\$/g, '$'), arg: null };
            }
            // Otherwise, return the substitution value.
            const substitute = args[Number(p[1]) - 1];
            if (substitute === undefined || substitute === null) {
                // Not all callers actually provide values for all substitutes. Return
                // an empty value for this case.
                return { value: '', arg: p };
            }
            return { value: substitute.toString(), arg: p };
        });
        return pieces;
    }
    /**
     * As above, but also makes sure that the value is a boolean.
     * @param id The key that identifies the desired boolean.
     * @return The corresponding boolean value.
     */
    getBoolean(id) {
        const value = this.getValue(id);
        assert(typeof value === 'boolean', `[${value}] (${id}) is not a boolean`);
        return value;
    }
    /**
     * As above, but also makes sure that the value is an integer.
     * @param id The key that identifies the desired number.
     * @return The corresponding number value.
     */
    getInteger(id) {
        const value = this.getValue(id);
        assert(typeof value === 'number', `[${value}] (${id}) is not a number`);
        assert(value === Math.floor(value), 'Number isn\'t integer: ' + value);
        return value;
    }
    /**
     * Override values in loadTimeData with the values found in |replacements|.
     * @param replacements The dictionary object of keys to replace.
     */
    overrideValues(replacements) {
        assert(typeof replacements === 'object', 'Replacements must be a dictionary object.');
        assert(this.data_, 'Data must exist before being overridden');
        for (const key in replacements) {
            this.data_[key] = replacements[key];
        }
    }
    /**
     * Reset loadTimeData's data. Should only be used in tests.
     * @param newData The data to restore to, when null restores to unset state.
     */
    resetForTesting(newData = null) {
        this.data_ = newData;
    }
    /**
     * @return Whether loadTimeData.data has been set.
     */
    isInitialized() {
        return this.data_ !== null;
    }
}
const loadTimeData = new LoadTimeData();
// Edge only
// Guard against overriding existing loadTimeData. This could happen if either:
// a) the page is already including loadTimeData from a script tag (perhaps it
//    is still using the deprecated version) but then also ends up including
//    this file as part of some other dependency, or
// b) the page is using multiple webpack entry points (not a good idea anyway)
//    that both include this file.
// In either case, we should warn the developer that something is wrong and not
// silently overwrite the existing instance which might already be initialized
// with data.
console.assert(!window.hasOwnProperty('loadTimeData'), 'window.loadTimeData is already set.');
Object.assign(window, { loadTimeData: loadTimeData });

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
 * Alias for document.getElementById. Found elements must be HTMLElements.
 */
function getRequiredElement(id) {
    const el = document.querySelector(`#${id}`);
    assert(el);
    assert(el instanceof HTMLElement);
    return el;
}

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
const HIDDEN_CLASS = 'hidden';

/**
 * @license
 * Copyright 2019 Google LLC
 * SPDX-License-Identifier: BSD-3-Clause
 */
const t$3=globalThis,e$3=t$3.ShadowRoot&&(void 0===t$3.ShadyCSS||t$3.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,s$3=Symbol(),o$3=new WeakMap;let n$3=class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s$3)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e;}get styleSheet(){let t=this.o;const s=this.t;if(e$3&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o$3.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o$3.set(s,t));}return t}toString(){return this.cssText}};const r$4=t=>new n$3("string"==typeof t?t:t+"",void 0,s$3),S$1=(s,o)=>{if(e$3)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement("style"),n=t$3.litNonce;void 0!==n&&o.setAttribute("nonce",n),o.textContent=e.cssText,s.appendChild(o);}},c$3=e$3?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const s of t.cssRules)e+=s.cssText;return r$4(e)})(t):t
/**
 * @license
 * Copyright 2017 Google LLC
 * SPDX-License-Identifier: BSD-3-Clause
 */;const{is:i$2,defineProperty:e$2,getOwnPropertyDescriptor:r$3,getOwnPropertyNames:h$2,getOwnPropertySymbols:o$2,getPrototypeOf:n$2}=Object,a$1=globalThis,c$2=a$1.trustedTypes,l$1=c$2?c$2.emptyScript:"",p$1=a$1.reactiveElementPolyfillSupport,d$1=(t,s)=>t,u$1={toAttribute(t,s){switch(s){case Boolean:t=t?l$1:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t);}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t);}catch(t){i=null;}}return i}},f$3=(t,s)=>!i$2(t,s),y$1={attribute:!0,type:String,converter:u$1,reflect:!1,hasChanged:f$3};Symbol.metadata??=Symbol("metadata"),a$1.litPropertyMetadata??=new WeakMap;class b extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t);}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=y$1){if(s.state&&(s.attribute=!1),this._$Ei(),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),r=this.getPropertyDescriptor(t,i,s);void 0!==r&&e$2(this.prototype,t,r);}}static getPropertyDescriptor(t,s,i){const{get:e,set:h}=r$3(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t;}};return {get(){return e?.call(this)},set(s){const r=e?.call(this);h.call(this,s),this.requestUpdate(t,r,i);},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??y$1}static _$Ei(){if(this.hasOwnProperty(d$1("elementProperties")))return;const t=n$2(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties);}static finalize(){if(this.hasOwnProperty(d$1("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d$1("properties"))){const t=this.properties,s=[...h$2(t),...o$2(t)];for(const i of s)this.createProperty(i,t[i]);}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i);}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t);}this.elementStyles=this.finalizeStyles(this.styles);}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(c$3(s));}else void 0!==s&&i.push(c$3(s));return i}static _$Eu(t,s){const i=s.attribute;return !1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev();}_$Ev(){this._$Eg=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$ES(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)));}addController(t){(this._$E_??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.();}removeController(t){this._$E_?.delete(t);}_$ES(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t);}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return S$1(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$E_?.forEach((t=>t.hostConnected?.()));}enableUpdating(t){}disconnectedCallback(){this._$E_?.forEach((t=>t.hostDisconnected?.()));}attributeChangedCallback(t,s,i){this._$AK(t,i);}_$EO(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:u$1).toAttribute(s,i.type);this._$Em=t,null==r?this.removeAttribute(e):this.setAttribute(e,r),this._$Em=null;}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),r="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u$1;this._$Em=e,this[e]=r.fromAttribute(s,t.type),this._$Em=null;}}requestUpdate(t,s,i,e=!1,r){if(void 0!==t){if(i??=this.constructor.getPropertyOptions(t),!(i.hasChanged??f$3)(e?r:this[t],s))return;this.C(t,s,i);}!1===this.isUpdatePending&&(this._$Eg=this._$EP());}C(t,s,i){this._$AL.has(t)||this._$AL.set(t,s),!0===i.reflect&&this._$Em!==t&&(this._$Ej??=new Set).add(t);}async _$EP(){this.isUpdatePending=!0;try{await this._$Eg;}catch(t){Promise.reject(t);}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0;}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t)!0!==i.wrapped||this._$AL.has(s)||void 0===this[s]||this.C(s,this[s],i);}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$E_?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$ET();}catch(s){throw t=!1,this._$ET(),s}t&&this._$AE(s);}willUpdate(t){}_$AE(t){this._$E_?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t);}_$ET(){this._$AL=new Map,this.isUpdatePending=!1;}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Eg}shouldUpdate(t){return !0}update(t){this._$Ej&&=this._$Ej.forEach((t=>this._$EO(t,this[t]))),this._$ET();}updated(t){}firstUpdated(t){}}b.elementStyles=[],b.shadowRootOptions={mode:"open"},b[d$1("elementProperties")]=new Map,b[d$1("finalized")]=new Map,p$1?.({ReactiveElement:b}),(a$1.reactiveElementVersions??=[]).push("2.0.2");
/**
 * @license
 * Copyright 2017 Google LLC
 * SPDX-License-Identifier: BSD-3-Clause
 */const t$2=globalThis,i$1=t$2.trustedTypes,s$2=i$1?i$1.createPolicy("lit-html-desktop",{createHTML:t=>t}):void 0,e$1="$lit$",h$1=`lit$${(Math.random()+"").slice(9)}$`,o$1="?"+h$1,n$1=`<${o$1}>`,r$2=document,l=()=>r$2.createComment(""),c$1=t=>null===t||"object"!=typeof t&&"function"!=typeof t,a=Array.isArray,u=t=>a(t)||"function"==typeof t?.[Symbol.iterator],d="[ \t\n\f\r]",f$2=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,v=/-->/g,_=/>/g,m=RegExp(`>|${d}(?:([^\\s"'>=/]+)(${d}*=${d}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),p=/'/g,g=/"/g,$=/^(?:script|style|textarea|title)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=y(1),w=Symbol.for("lit-noChange"),T=Symbol.for("lit-nothing"),A=new WeakMap,E=r$2.createTreeWalker(r$2,129);function C(t,i){if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==s$2?s$2.createHTML(i):i}const P=(t,i)=>{const s=t.length-1,o=[];let r,l=2===i?"<svg>":"",c=f$2;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,y=0;for(;y<s.length&&(c.lastIndex=y,u=c.exec(s),null!==u);)y=c.lastIndex,c===f$2?"!--"===u[1]?c=v:void 0!==u[1]?c=_:void 0!==u[2]?($.test(u[2])&&(r=RegExp("</"+u[2],"g")),c=m):void 0!==u[3]&&(c=m):c===m?">"===u[0]?(c=r??f$2,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?m:'"'===u[3]?g:p):c===g||c===p?c=m:c===v||c===_?c=f$2:(c=m,r=void 0);const x=c===m&&t[i+1].startsWith("/>")?" ":"";l+=c===f$2?s+n$1:d>=0?(o.push(a),s.slice(0,d)+e$1+s.slice(d)+h$1+x):s+h$1+(-2===d?i:x);}return [C(t,l+(t[s]||"<?>")+(2===i?"</svg>":"")),o]};class V{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let c=0,a=0;const u=t.length-1,d=this.parts,[f,v]=P(t,s);if(this.el=V.createElement(f,n),E.currentNode=this.el.content,2===s){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes);}for(;null!==(r=E.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(e$1)){const i=v[a++],s=r.getAttribute(t).split(h$1),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:c,name:e[2],strings:s,ctor:"."===e[1]?k:"?"===e[1]?H:"@"===e[1]?I:R}),r.removeAttribute(t);}else t.startsWith(h$1)&&(d.push({type:6,index:c}),r.removeAttribute(t));if($.test(r.tagName)){const t=r.textContent.split(h$1),s=t.length-1;if(s>0){r.textContent=i$1?i$1.emptyScript:"";for(let i=0;i<s;i++)r.append(t[i],l()),E.nextNode(),d.push({type:2,index:++c});r.append(t[s],l());}}}else if(8===r.nodeType)if(r.data===o$1)d.push({type:2,index:c});else {let t=-1;for(;-1!==(t=r.data.indexOf(h$1,t+1));)d.push({type:7,index:c}),t+=h$1.length-1;}c++;}}static createElement(t,i){const s=r$2.createElement("template");return s.innerHTML=t,s}}function N(t,i,s=t,e){if(i===w)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=c$1(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=N(t,h._$AS(t,i.values),h,e)),i}class S{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i;}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??r$2).importNode(i,!0);E.currentNode=e;let h=E.nextNode(),o=0,n=0,l=s[0];for(;void 0!==l;){if(o===l.index){let i;2===l.type?i=new M(h,h.nextSibling,this,t):1===l.type?i=new l.ctor(h,l.name,l.strings,this,t):6===l.type&&(i=new L(h,this,t)),this._$AV.push(i),l=s[++n];}o!==l?.index&&(h=E.nextNode(),o++);}return E.currentNode=r$2,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++;}}class M{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=T,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0;}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=N(this,t,i),c$1(t)?t===T||null==t||""===t?(this._$AH!==T&&this._$AR(),this._$AH=T):t!==this._$AH&&t!==w&&this._(t):void 0!==t._$litType$?this.g(t):void 0!==t.nodeType?this.$(t):u(t)?this.T(t):this._(t);}k(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}$(t){this._$AH!==t&&(this._$AR(),this._$AH=this.k(t));}_(t){this._$AH!==T&&c$1(this._$AH)?this._$AA.nextSibling.data=t:this.$(r$2.createTextNode(t)),this._$AH=t;}g(t){const{values:i,_$litType$:s}=t,e="number"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=V.createElement(C(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else {const t=new S(e,this),s=t.u(this.options);t.p(i),this.$(s),this._$AH=t;}}_$AC(t){let i=A.get(t.strings);return void 0===i&&A.set(t.strings,i=new V(t)),i}T(t){a(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new M(this.k(l()),this.k(l()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e);}_$AR(t=this._$AA.nextSibling,i){for(this._$AP?.(!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i;}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t));}}class R{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=T,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=T;}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=N(this,t,i,0),o=!c$1(t)||t!==this._$AH&&t!==w,o&&(this._$AH=t);else {const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=N(this,e[s+n],i,n),r===w&&(r=this._$AH[n]),o||=!c$1(r)||r!==this._$AH[n],r===T?t=T:t!==T&&(t+=(r??"")+h[n+1]),this._$AH[n]=r;}o&&!e&&this.O(t);}O(t){t===T?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"");}}class k extends R{constructor(){super(...arguments),this.type=3;}O(t){this.element[this.name]=t===T?void 0:t;}}class H extends R{constructor(){super(...arguments),this.type=4;}O(t){this.element.toggleAttribute(this.name,!!t&&t!==T);}}class I extends R{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5;}_$AI(t,i=this){if((t=N(this,t,i,0)??T)===w)return;const s=this._$AH,e=t===T&&s!==T||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==T&&(s===T||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t;}handleEvent(t){"function"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t);}}class L{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s;}get _$AU(){return this._$AM._$AU}_$AI(t){N(this,t);}}const Z=t$2.litHtmlPolyfillSupport;Z?.(V,M),(t$2.litHtmlVersions??=[]).push("3.1.0");const j=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new M(i.insertBefore(l(),t),t,void 0,s??{});}return h._$AI(t),h
/**
 * @license
 * Copyright 2017 Google LLC
 * SPDX-License-Identifier: BSD-3-Clause
 */};let s$1=class s extends b{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0;}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=j(i,this.renderRoot,this.renderOptions);}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0);}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1);}render(){return w}};s$1._$litElement$=!0,s$1["finalized"]=!0,globalThis.litElementHydrateSupport?.({LitElement:s$1});const r$1=globalThis.litElementPolyfillSupport;r$1?.({LitElement:s$1});(globalThis.litElementVersions??=[]).push("4.0.2");

// Copyright 2013 The Chromium Authors. All rights reserved.
// Copyright (C) Microsoft Corporation. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
let showingDetails = false;
let lastData;
function toggleHelpBox() {
    showingDetails = !showingDetails;
    j(getHtml(lastData, showingDetails), getRequiredElement('content'));
}
function diagnoseErrors() {
    // 
    if (window.errorPageController) {
        window.errorPageController.diagnoseErrorsButtonClick();
    }
    // 
    // 
}
function clearCookiesClick() {
    if (window.errorPageController) {
        window.errorPageController.clearCookiesButtonClick();
    }
}
// Subframes use a different layout but the same html file.  This is to make it
// easier to support platforms that load the error page via different
// mechanisms (Currently just iOS). We also use the subframe style for portals
// as they are embedded like subframes and can't be interacted with by the user.
let isSubFrame = false;
if (window.top.location !== window.location) {
    document.documentElement.setAttribute('subframe', '');
    isSubFrame = true;
}
// Re-renders the error page using |strings| as the dictionary of values.
// Used by NetErrorTabHelper to update DNS error pages with probe results.
function updateForDnsProbe(newData) {
    onTemplateDataReceived(newData);
}
function getMainFrameErrorCssClass(showingDetails) {
    return showingDetails ? 'showing-details' : '';
}
function getMainFrameErrorIconCssClass(data) {
    return isSubFrame ? '' : data.iconClass;
}
function shouldShowSuggestionsSummaryList(data) {
    return !!data.suggestionsSummaryList &&
        data.suggestionsSummaryList.length > 0;
}
function getSuggestionsSummaryItemCssClass(data) {
    assert(data.suggestionsSummaryList);
    return data.suggestionsSummaryList.length === 1 ? 'single-suggestion' : '';
}
// Does a search using |baseSearchUrl| and the text in the search box.
function search(baseSearchUrl) {
    const searchTextNode = getRequiredElement('search-box');
    document.location = baseSearchUrl + searchTextNode?.value;
    return false;
}
// Called when an <a> tag generated by the navigation correction service is
// clicked.
// @param {{clickData: string}} jstdata
function navigationCorrectionClicked(jstdata) {
    if (jstdata.clickData !== undefined && window.errorPageController) {
        window.errorPageController.edgeNavigationCorrectionClicked(jstdata.clickData);
    }
}
// Implements button clicks.  This function is needed during the transition
// between implementing these in trunk chromium and implementing them in
// iOS.
function reloadButtonClick(e) {
    const url = e.target.dataset['url'];
    if (window.errorPageController) {
        window.errorPageController.reloadButtonClick();
    }
    else {
        assert(url);
        window.location.href = url;
    }
}
function showSavedCopyButtonClick() {
    if (window.errorPageController) {
        window.errorPageController.showSavedCopyButtonClick();
    }
}
function downloadButtonClick() {
    if (window.errorPageController) {
        window.errorPageController.downloadButtonClick();
        const downloadButton = getRequiredElement('download-button');
        downloadButton.disabled = true;
        downloadButton.textContent = downloadButton.disabledText;
    }
}
// TODO(crbug.com/883486): UI not yet implemented.
function setAutoFetchState(scheduled, canSchedule) {
    getRequiredElement('cancel-save-page-button')
        .classList.toggle(HIDDEN_CLASS, !scheduled);
    getRequiredElement('save-page-for-later-button')
        .classList.toggle(HIDDEN_CLASS, !canSchedule);
}
function cancelSavePageClick() {
    assert(window.errorPageController);
    if (window.errorPageController) {
        window.errorPageController.cancelSavePage();
    }
    // setAutoFetchState is not called in response to cancelSavePage(), so do it
    // now.
    setAutoFetchState(false, true);
}
function savePageLaterClick() {
    assert(window.errorPageController);
    if (window.errorPageController) {
        window.errorPageController.savePageForLater();
    }
}
// Populates a summary of suggested offline content.
function offlineContentSummaryAvailable(summary) {
    // Note: See AvailableContentSummaryToValue in
    // available_offline_content_helper.cc for the data contained in |summary|.
    if (!summary || summary.total_items === 0 ||
        !loadTimeData.valueExists('offlineContentSummary')) {
        return;
    }
    // TODO(https://crbug.com/852872): Customize presented icons based on the
    // types of available offline content.
    getRequiredElement('offline-content-summary').hidden = false;
}
// Populates a list of suggested offline content.
// Note: For security reasons all content downloaded from the web is considered
// unsafe and must be securely handled to be presented on the dino page. Images
// have already been safely re-encoded but textual content -- like title and
// attribution -- must be properly handled here.
function shouldShowControlButtons(data) {
    const downloadButtonVisible = !!data.downloadButton && !!data.downloadButton.msg;
    const reloadButtonVisible = !!data.reloadButton && !!data.reloadButton.msg;
    const diagnoseButtonVisible = !!data.diagnoseButton && !!data.diagnoseButton.msg;
    const clearCookiesButtonVisible = !!data.clearCookiesButton && !!data.clearCookiesButton.msg;
    return reloadButtonVisible || downloadButtonVisible || diagnoseButtonVisible || clearCookiesButtonVisible;
}
function getPrimaryControlOnLeft() {
    let primaryControlOnLeft = true;
    // clang-format off
    // 
    // clang-format on
    primaryControlOnLeft = false;
    // 
    return primaryControlOnLeft;
}
// Sets up the proper button layout for the current platform.
function getButtonsCssClass() {
    return getPrimaryControlOnLeft() ? 'suggested-left' : 'suggested-right';
}
function onDocumentLoad() {
    onTemplateDataReceived(window.loadTimeDataRaw);
}
function onTemplateDataReceived(newData) {
    lastData = newData;
    j(getHtml(lastData, showingDetails), getRequiredElement('content'));
    if (!isSubFrame && newData.iconClass === 'icon-offline') {
        document.documentElement.classList.add('offline');
        // Set loadTimeData.data because it is used by the dino code.
        loadTimeData.data = newData;
    }
}
function getDetailsButtonCssClass(data) {
    return shouldShowControlButtons(data) ? '' : 'singular';
}
function getSubFrameErrorIconCssClass(data) {
    return isSubFrame ? data.iconClass : '';
}
function shouldShowDetailsButton(data) {
    return !!data.suggestionsDetails && data.suggestionsDetails.length > 0;
}
function getDetailsButtonText(data, showingDetails) {
    assert(data.details);
    assert(data.hideDetails);
    return showingDetails ? data.hideDetails : data.details;
}
function detailsButtonClick() {
    if (window.errorPageController) {
        window.errorPageController.detailsButtonClick();
    }
    toggleHelpBox();
}
function launchGame() {
    const gameButtonDisabled = loadTimeData.valueExists('disabledGame') &&
        loadTimeData.getBoolean('disabledGame');
    if (!gameButtonDisabled) {
        // 
        // 
        window.errorPageController?.openSurfGame();
        // 
    }
}
function getHtml(data, showingDetails) {
    return x `
    <div id="main-frame-error" class="interstitial-wrapper ${getMainFrameErrorCssClass(showingDetails)}">
      <div id="main-content">
        <div class="icon ${getMainFrameErrorIconCssClass(data)}"></div>
        <div id="main-message">
          <h1>
            <span .innerHTML="${data.heading.msg}"></span>
          </h1>
          ${data.summary ? x `
            <p .innerHTML="${data.summary.msg}"></p>
          ` : ''}

          ${shouldShowSuggestionsSummaryList(data) ? x `
            <div id="suggestions-list">
              <p>${data.suggestionsSummaryListHeader}</p>
              <ul class="${getSuggestionsSummaryItemCssClass(data)}">
                ${data.suggestionsSummaryList.map(item => x `
                  <li .innerHTML="${item.summary}"></li>
                `)}
              </ul>
            </div>
          ` : ''}
          <div id="https-upgrades-message"
               class="${data.httpsUpgradesMessage ? '' : 'hidden'}">
            <p id="https-upgrades-message-details"
               class="${data.showHttpsUpgradesDetails ? '' : 'hidden'}"
               .innerHTML=${data.httpsUpgradesMessage?.msg}></p>
          </div>
          <div class="error-code">${data.errorCode}</div>
          <div id="diagnose-frame" class="hidden"></div>
          ${data.savePageLater ? x `
            <div id="save-page-for-later-button">
              <a class="link-button" @click="${savePageLaterClick}">
                ${data.savePageLater.savePageMsg}
              </a>
            </div>
            <div id="cancel-save-page-button" class="hidden"
                @click="${cancelSavePageClick}"
                .innerHTML="${data.savePageLater.cancelMsg}">
            </div>
          ` : ''}
        </div>
      </div>
      <div id="buttons" class="nav-wrapper ${getButtonsCssClass()}">
        <div id="control-buttons" ?hidden="${!shouldShowControlButtons(data)}">
          ${getControlButtons(data)}
        </div>
        ${shouldShowDetailsButton(data) ? x `
          <button id="details-button" class="secondary-button text-button
              small-link ${getDetailsButtonCssClass(data)}"
              @click="${detailsButtonClick}">
            ${getDetailsButtonText(data, showingDetails)}
          </button>
        ` : ''}
      </div>
      ${data.suggestionsDetails ? x `
        <div id="details">
          ${data.suggestionsDetails.map(item => x `
            <div class="suggestions">
              <div class="suggestion-header" .innerHTML="${item.header}"></div>
              <div class="suggestion-body" .innerHTML="${item.body}"></div>
            </div>
          `)}
        </div>
      ` : ''}
      ${data.showGameButtons ? x `
        <div id="game-div">
          <div class="game-split-line"></div>
            <div id="game-buttons">
            <span id="game-message">${data.playGameMsg}</span>
            ${data.disabledGame ? x `
              <div class="managed-icon"
                title=${data.disabledGameMsg}></div>
            ` : ''}
            <button
              id="game-button"
              ?disabled=${data.disabledGame}
              @click="${launchGame}">
              <div class="icon-play-game-button" alt=""></div>
              <div class="game-button-msg">
                ${data.gameButton?.msg}
              </div>
            </button>
          </div>
        </div>
      ` : ''}
    </div>
    </div>
    ${data.summary ? x `
      <div id="sub-frame-error">
        <!-- Show details when hovering over the icon, in case the details are
             hidden because they're too large. -->
        <div class="icon ${getSubFrameErrorIconCssClass(data)}"></div>
        <div id="sub-frame-error-details" .innerHTML="${data.summary.msg}">
        </div>
      </div>
    ` : ''}
  `;
    // clang-format on
}
function getControlButtons(data) {
    if (!data.diagnoseButton && !data.downloadButton && !data.clearCookiesButton && data.reloadButton) {
        return x `
      ${data.reloadButton ? x `
        <button id="reload-button"
            class="blue-button text-button"
            @click="${reloadButtonClick}"
            data-url="${data.reloadButton.reloadUrl}">
          ${data.reloadButton.msg}
        </button>
      ` : ''}`;
    }
    return x `
    ${data.reloadButton && !getPrimaryControlOnLeft() ? x `
      <button id="secondary-reload-button"
          class="blue-button text-button"
          @click="${reloadButtonClick}"
          data-url="${data.reloadButton.reloadUrl}">
        ${data.reloadButton.msg}
      </button>
    ` : ''}
    ${data.clearCookiesButton ? x `
      <button id="clearcookies-button"
          class="blue-button text-button"
          @click="${clearCookiesClick}">
        ${data.clearCookiesButton.msg}
      </button>
    ` : ''}
    ${data.downloadButton ? x `
      <button id="download-button"
          class="blue-button text-button"
          @click="${downloadButtonClick}"
          .disabledText="${data.downloadButton.disabledMsg}">
        ${data.downloadButton.msg}
      </button>
    ` : ''}
    ${data.diagnoseButton ? x `
      <button id="diagnose-button"
          class="blue-button text-button"
          @click="${diagnoseErrors}">
        ${data.diagnoseButton.msg}
      </button>
    ` : ''}
    ${data.reloadButton && getPrimaryControlOnLeft() ? x `
      <button id="secondary-reload-button"
          class="blue-button text-button"
          @click="${reloadButtonClick}"
          data-url="${data.reloadButton.reloadUrl}">
        ${data.reloadButton.msg}
      </button>
    ` : ''}
    `;
}
// Opens edge://settings/privacy.
function launchEdgePrivacySettings() {
    if (window.errorPageController) {
        window.errorPageController.openEdgePrivacySettings();
    }
}
// Updates https_upgrade_state from
// third_party/blink/public/mojom/renderer_preferences.mojom to
// edge_https::UpgradeState::UPGRADE_FAILURE_IGNORED if Edge's
// Automatic HTTPS component needs to be bypassed.
function updateHttpsUpgradeState() {
    if (window.errorPageController) {
        window.errorPageController.bypassEdgeHttpsUpgrades();
    }
}
// Expose methods that are triggered either
//  - By `onclick=...` handlers in the HTML code, OR
//  - By `href="javascript:..."` in localized links.
//  - By inected JS code coming from C++
//  since those need to be available on the 'window' object.
Object.assign(window, {
    diagnoseErrors,
    clearCookiesClick,
    toggleHelpBox,
    updateForDnsProbe,
    search,
    navigationCorrectionClicked,
    showSavedCopyButtonClick,
    offlineContentSummaryAvailable,
    launchEdgePrivacySettings,
    updateHttpsUpgradeState,
    launchGame,
});
document.addEventListener('DOMContentLoaded', onDocumentLoad);
//# sourceMappingURL=edge-neterror.rollup.js.map
</script>
</head>
<body style="font-family: system-ui,PingFang SC,STHeiti,sans-serif; font-size: 75%">
<div id="content"><!---->
    <div id="main-frame-error" class="interstitial-wrapper ">
      <div id="main-content">
        <div class="icon "></div>
        <div id="main-message">
          <h1>
            <span>已阻止 <span>td.doubleclick.net</span></span>
          </h1>
          <!--?lit$114478071$-->
            <p>已阻止此内容。请与网站所有者联系以解决此问题。</p>
          

          <!--?lit$114478071$-->
          <div id="https-upgrades-message" class="hidden">
            <p id="https-upgrades-message-details" class="hidden">undefined</p>
          </div>
          <div class="error-code"><!--?lit$114478071$-->ERR_BLOCKED_BY_CSP</div>
          <div id="diagnose-frame" class="hidden"></div>
          <!--?lit$114478071$-->
        </div>
      </div>
      <div id="buttons" class="nav-wrapper suggested-right">
        <div id="control-buttons" hidden="">
          <!--?lit$114478071$-->
    <!--?lit$114478071$-->
    <!--?lit$114478071$-->
    <!--?lit$114478071$-->
    <!--?lit$114478071$-->
    <!--?lit$114478071$-->
    
        </div>
        <!--?lit$114478071$-->
      </div>
      <!--?lit$114478071$-->
        <div id="details">
          <!--?lit$114478071$-->
        </div>
      
      <!--?lit$114478071$-->
    </div>
    
    <!--?lit$114478071$-->
      <div id="sub-frame-error">
        <!-- Show details when hovering over the icon, in case the details are
             hidden because they're too large. -->
        <div class="icon icon-blocked"></div>
        <div id="sub-frame-error-details">已阻止此内容。请与网站所有者联系以解决此问题。</div>
      </div>
    
  </div>


<script>var loadTimeDataRaw = {"details":"详细信息","errorCode":"ERR_BLOCKED_BY_CSP","fontfamily":"system-ui,PingFang SC,STHeiti,sans-serif","fontfamilyMd":"system-ui,PingFang SC,STHeiti,sans-serif","fontsize":"75%","heading":{"msg":"已阻止 \u003Cspan>td.doubleclick.net\u003C/span>"},"hideDetails":"隐藏详细信息","iconClass":"icon-blocked","is_windows_xbox_sku":"false","language":"zh","suggestionsDetails":[],"suggestionsSummaryList":[],"summary":{"msg":"已阻止此内容。请与网站所有者联系以解决此问题。"},"textdirection":"ltr","title":"td.doubleclick.net"};</script></body></html>